<?php
/**
 * Implenta las funciones necesarias para gestionar aluminio
 *
 * @author Daniel Cardoza, Gary Dos Santos, Freddy Rodriguez
 */
class DBAluminioDAO extends DBMySQLDAO implements IDBAluminioDAO {

    private $DBConn = null;

    public function  __construct() {
        $conexion = new conexion();
        try {
            $this->DBConn = $conexion->setConnect();
        } catch ( SQLException $Ex ) {
            throw new DBAluminioDAOException("Se produjo un error al concetar con la base de datos", 1);
        }
    }

     /**
     *Devuelve el precio del id del aluminio que entra por parametro y el color
     * indica que columna de precio se va a retornar
     *
     * @param <int> $id
     * @param <int> $color
     * @return <Array> $fila['CAL_ANONI_PLATA']
     * @return <Array> $fila['CAL_ANONI_BRONCE']
     * @return <Array> $fila['CAL_PINT_BN']
     * @return <Array> $fila['CAL_PINT_OTRO']
     * @return <bool> false
     * @test
     *
     */
    public function selectPrecio( $id , $color ) {
        $id = addslashes($id);

        switch ( $color ){
            case "1" : 
                        $str = "SELECT CAL_ANONI_PLATA
                                    FROM costo_aluminio
                                    WHERE CAL_ID = {$id}
                                    AND CAL_STATUS = 1";
            
                        $this->DBConn->consulta( $str );

                        if ( $this->DBConn->filasAfectadas() != -1){
                            $fila = $this->DBConn->extraer_registro();
                            return $fila['CAL_ANONI_PLATA'];
                        } else {
                            return false;
                        }
                        break;

            case "2" : $this->DBConn->consulta( "SELECT CAL_ANONI_BRONCE
                            FROM costo_aluminio
                            WHERE CAL_ID = $id
                            AND CAL_STATUS = 1" );

                        if ( $this->DBConn->filasAfectadas() != -1){
                            $fila = $this->DBConn->extraer_registro();
                            return $fila['CAL_ANONI_BRONCE'];
                        } else {
                            return false;
                        }
                        break;

            case "3" : $this->DBConn->consulta( "SELECT CAL_PINT_BN
                            FROM costo_aluminio
                            WHERE CAL_ID = $id
                            AND CAL_STATUS = 1" );

                        if ( $this->DBConn->filasAfectadas() != -1){
                            $fila = $this->DBConn->extraer_registro();
                            return $fila['CAL_PINT_BN'];
                        } else {
                            return false;
                        }
                        break;

            case "4" : $this->DBConn->consulta( "SELECT CAL_PINT_OTRO
                            FROM costo_aluminio
                            WHERE CAL_ID = $id
                            AND CAL_STATUS = 1" );

                        if ( $this->DBConn->filasAfectadas() != -1){
                            $fila = $this->DBConn->extraer_registro();
                            return $fila['CAL_PINT_OTRO'];
                        } else {
                            return false;
                        }
                        break;
                        
        }

    }

    /**
     * Retorna un arreglo de tipos con sus ids
     *
     * @param int $id
     * @return listaNombres[]
     */
    public function listaTipo() {
        $str = "SELECT CAL_ID, CAL_TIPO
                    FROM costo_aluminio
                    WHERE CAL_STATUS = 1
                    GROUP BY CAL_TIPO";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){

            while ( $fila = $this->DBConn->extraer_registro() ) {

                 $listaTipos[] = $fila;
            }

            return $listaTipos;
        } else {
            return false;
        }

    }

    /**
     *  Retorna un arreglo de nombres con sus ids
     *
     * @param int $id
     * @return listaNombres[]
     */
    public function listaNombre( $id ) {
        $id = addslashes($id);
        
        $str = "SELECT CAL_ID, CAL_NOMBRE
                    FROM costo_aluminio
                    WHERE CAL_TIPO IN (
                    SELECT CAL_TIPO
                    FROM costo_aluminio
                    WHERE CAL_ID = {$id})";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){

            while ( $fila = $this->DBConn->extraer_registro() ) {

                 $listaNombres[] = $fila;
            }

            return $listaNombres;
        } else {
            return false;
        }

    }

    
     /**
     * Devuelve un aluminio
     *
     * @param int $id
     * @return Aluminio
     * @return <bool> false
     * @test
     *
     */
    public function select( $id ) {
        $id = addslashes( $id );
        
        $str = "SELECT *
                    FROM costo_aluminio
                    WHERE CAL_ID = {$id}
                    AND CAL_STATUS = 1";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            $fila = $this->DBConn->extraer_registro();

            $aluminio = new Aluminio($fila['CAL_NOMBRE'], $fila['CAL_TIPO'], 0, 0, 0, 0, 0);

             return $aluminio;
        } else {
            return false;
        }

    }

     /**
     *Devuelve el tipo del id del aluminio que entra por parametro
     *
     * @param <int> $id
     * @return <int> $fila['CAC_PRECIO']
     * @return <bool> false
     * @test
     *
     */
    public function selectTipo( $id ) {
        $this->DBConn->consulta( "SELECT CAL_TIPO
                            FROM costo_aluminio
                            WHERE CAL_ID = $id
                            AND CAL_STATUS = 1" );

        if ( $this->DBConn->filasAfectadas() != -1){
            $fila = $this->DBConn->extraer_registro();
            return $fila['CAL_TIPO'];
        } else {
            return false;
        }

    }

     /**
     *Insertar un Aluminio en la base de datos y lo asigna al id del presupuesto
     * que se pasa por parametro
     *
     * @param <Aluminio> $aluminio
     * @param <int> $PTO_ID
     * @return <bool> true
     * @return <bool> false
     * @test
     *
     */
    public function Insert( Aluminio $aluminio , $idPresupuesto ) {
        $nombre = $aluminio->getNombre();
        $tipo = $aluminio->getTipo();
        $color = $aluminio->getColor();
        $tipoColor = $aluminio->getTipoColor();
        $ancho = $aluminio->getAncho();
        $precio = $aluminio->getPrecio();
        $cantidad = $aluminio->getCantidad();

        $this->DBConn->consulta( "INSERT INTO Aluminio (ALM_NOMBRE, ALM_TIPO, ALM_COLOR, ALM_TIPO_COLOR, ALM_ANCHO, ALM_PRECIO, ALM_CANTIDAD)
                                VALUES ('$nombre','$tipo','$color','$tipoColor',$ancho,$precio,$cantidad) " );

        $this->DBConn->consulta( "SELECT ALM_ID FROM Aluminio
                        WHERE ALM_NOMBRE = '$nombre'
                        AND ALM_TIPO = '$tipo'
                        AND ALM_COLOR = '$color'
                        AND ALM_TIPO_COLOR = '$tipoColor'
                        AND ALM_ANCHO = $ancho
                        AND ALM_PRECIO = $precio
                        AND ALM_CANTIDAD = $cantidad
                        AND ALM_STATUS = 1
                        ORDER BY ALM_ID DESC " );

        $fila = $this->DBConn->extraer_registro();
            $id = $fila[ 'ALM_ID' ];

        $subTotal = $aluminio->calcularSubTotal();
        $this->DBConn->consulta( "INSERT INTO detalle_presupuesto (DPR_SUB_TOTAL,DPR_PTO_ID,DPR_ALM_ID)
                                VALUES ($subTotal, $idPresupuesto, $id)" );

        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }

    }


     /**
     *Elimina la informacion de un Aluminio
     *
     * @return boolean
     * @test
     *
     */
    public function delete( $id ){
        $id = addslashes( $id );

        $str = "UPDATE Aluminio
                    SET ALM_STATUS = 0
                    WHERE ALM_ID = {$id}";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }

    }

}
?>
